package rodrigosetti.colorstrike.fase;

import java.io.IOException;

import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.game.Sprite;

import rodrigosetti.colorstrike.core.Constantes;

public class Inimigo extends Personagem implements Interagivel {
    
    public static final float ACELERACAO = 0.2f;
    
    public int identidade;
    private static Image imagem;
    private boolean direcao;
    private boolean direcaoInicial;
    public boolean morrendo;
    
    private int posX, posY;
    
    public Inimigo(Fase fase, int posx, int posy, int tipo) {
        this(fase, posx, posy, tipo, true);
    }
    
    /**
     * Constructor
     * @param fase
     * @param posx
     * @param posy
     * @param tipo
     * @param dir
     */
    public Inimigo(Fase fase, int posx, int posy, int tipo, boolean dir) {
        super(fase, posx, posy);
        this.posX = posx;
        this.posY = posy;
        
        if (imagem == null) {
            try {
                imagem = Image.createImage("/inimigos.png");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        identidade = tipo;
        direcao = dir;
        direcaoInicial = dir;
        morrendo = false;
        
        sprite = new Sprite(imagem, Constantes.INIMIGO_X, Constantes.INIMIGO_Y);
        sprite.defineCollisionRectangle(2, 2, Constantes.INIMIGO_X-2, Constantes.INIMIGO_Y-2);
        sprite.setFrameSequence(Constantes.SEQ_INIMIGO[identidade]);
        sprite.setTransform((direcao)? Sprite.TRANS_MIRROR : Sprite.TRANS_NONE);
        sprite.setPosition(posX, posY);
    }
    
    public void onShow() {
    }
    
    public void onHide() {
       		
        sprite.setPosition(posX, posY);
	posicao.x = posX;
	posicao.y = posY;
	velocidade.x = 0;
	velocidade.y = 0;
        direcao = direcaoInicial;
        sprite.setTransform(Sprite.TRANS_NONE);
        morrendo = false;
	
	ativo = !fase.visivel(this);
    }
    
        /* (non-Javadoc)
         * @see rodrigosetti.colorstrike.fase.Interagivel#interagir(rodrigosetti.colorstrike.fase.Elemento)
         */
    public void interagir(Elemento e) {
        
        /* Se esta morrendo, nao interage com nada */
        if (morrendo)
            return;
        
        /* Se eh bloco */
        if (e instanceof Bloco) {
            
            int tipoColisao = this.colide(e);
            
            /* Se colide os pes */
            if (tipoColisao == Elemento.SUPERIOR) {
                velocidade.x += (direcao) ? -ACELERACAO : ACELERACAO;
                sprite.nextFrame();
            }
            
            /* Se colide horizontalmente a esquerda ou direita */
            if (tipoColisao == Elemento.LATERAL_ESQ || tipoColisao == Elemento.LATERAL_DIR) {
                /* Muda direcao */
                direcao = !direcao;
                
//				sprite.setTransform((direcao)? Sprite.TRANS_MIRROR : Sprite.TRANS_NONE);
            }
            
            if (tipoColisao != Elemento.SEM_COLISAO)
                super.interagir(e);
        }
    }
    
}
